今天要來看 方法(Methods) 。
Class、Struct和 Enum 都可以定義實力方法,他們裡面可以有特定類型的實例跟功能。
實例方法要寫在所屬類型的 {} 裡面。
看下面官方的例子
class Counter {
var count = 0
func increment() {
count += 1
}
func increment(by amount: Int) {
count += amount
}
func reset() {
count = 0
}
}
而這個 Counter 裡面有三個方法
let counter = Counter()
// 一開始為0
counter.increment()
// 現在是1
counter.increment(by: 5)
// 現在是6
counter.reset()
// 現在是0
每個實例其實都有一個屬性叫做 self 就是自己本身。
根據上面的例子, increment 的方法也可以這樣寫
func increment() {
self.count += 1
}
Struct 跟 enum 在預設的情況下是不能再實例方法中被修改。
如果你的 Struct 跟 enum 有需要修改,那可以在你要修改的方法前面加上 mutating 這個屬性。這樣就可以改變方法裡面的屬性。
struct Point {
var x = 0.0, y = 0.0
mutating func moveBy(x deltaX: Double, y deltaY: Double) {
x += deltaX
y += deltaY
}
}
var somePoint = Point(x: 1.0, y: 1.0)
somePoint.moveBy(x: 2.0, y: 3.0)
print("The point is now at (\(somePoint.x), \(somePoint.y))")
// 印出“The point is now at (3.0, 4.0)”
enum 的可變方法可以把 self 設置為同一個 enum 得不同成員
我們看一下官方的例子
enum TriStateSwitch {
case off, low, high
mutating func next() {
switch self {
case .off:
self = .low
case .low:
self = .high
case .high:
self = .off
}
}
}
var ovenLight = TriStateSwitch.low
ovenLight.next()
// ovenLight = .high
ovenLight.next()
// ovenLight = .off
上面的例子中每次調用就會改變 self 本身的狀態。
實例方法是被某個類型的實例調用方法,你也可以定義在類型本身上調用方法。這種方法我們叫 類型方法 。 會在 func 前面加上 static 這個關鍵字。如鬼事 Class 可以用 class 來指定,從而做到修改。
我們可以新增一個加法
class Math {
func add(_ a:Int , _ b:Int) -> Int {
return a + b
}
}
let finalResult = Math()
print(finalResult.add(5, 10))
//print 15
那如果使用類型方法就會長下面這樣
class Math{
class func add(_ a: Int, _ b: Int) -> Int {
return a + b
}
}
let finalResult = Math.add(10, 5)
//finalResult = 15
OK,今天就到這裡。